package com.sky.service.user;

import com.sky.dto.OrdersCancelDTO;
import com.sky.dto.OrdersConfirmDTO;
import com.sky.dto.OrdersPageQueryDTO;
import com.sky.dto.OrdersSubmitDTO;
import com.sky.pojo.Courier;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.OrdersVO;

import java.io.IOException;

public interface OrderService {
    /**
     * 下单
     * @param ordersSubmitDTO
     * @return
     */
    OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO);

    /**
     * 根据条件分页查询订单的数据
     * @param queryDTO
     * @return
     */
    Result<PageResult<OrdersVO>> pageQuery(OrdersPageQueryDTO queryDTO);

    /**
     * 统计各个状态的订单数量
     * @return
     */
    Result<OrderStatisticsVO> statistics();

    Result<OrdersVO> getDetailById(Long orderId);

    /**
     * 商家取消订单
     * @param cancelDTO
     * @return
     */
    Result<String> cancelOrder(OrdersCancelDTO cancelDTO) throws IOException;

    /**
     * 用户端订单分页查询
     * @param page
     * @param pageSize
     * @param status
     * @return
     */
    PageResult pageQuery4User(int page, int pageSize, Integer status);

    /**
     * 用户取消订单
     * @param id
     */
    void userCancelById(Long id) throws Exception;

    /**
     * 再来一单
     *
     * @param id
     */
    void repetition(Long id);

    /**
     * 商家接单
     * @param cancelDTO
     * @return
     */
    Result<Courier> confirm(OrdersConfirmDTO confirmDTO);
}
